EF Core Interceptors এবং Logging Techniques

Microsoft Technologies - এন্টিটি ফ্রেমওয়র্ক (Entity Framework) Advanced Topics এবং Entity Framework Best Practices |
236
236

EF Core Interceptors এবং Logging হল দুইটি শক্তিশালী ফিচার যা ডেটাবেস অ্যাক্সেস এবং এর কার্যকলাপ ট্র্যাক করতে ব্যবহৃত হয়। Interceptors আপনাকে EF Core-এর বিভিন্ন অপারেশন যেমন, SaveChanges, Query Execution, Transaction ইত্যাদিতে হস্তক্ষেপ করার সুযোগ দেয়, এবং Logging আপনাকে আপনার অ্যাপ্লিকেশন এবং ডেটাবেসের কার্যকলাপের বিস্তারিত ট্রেস বা লগ তৈরি করতে সাহায্য করে। এগুলোর মাধ্যমে আপনি আরও ভাল ডিবাগিং, পারফরম্যান্স মনিটরিং এবং কাস্টম লগিং ফিচার তৈরি করতে পারবেন।


EF Core Interceptors

EF Core Interceptors হল এমন মেকানিজম যা আপনাকে EF Core-এর বিভিন্ন প্রসেসে হস্তক্ষেপ করার সুযোগ দেয়। ইন্টারসেপ্টর ব্যবহার করে আপনি SQL কমান্ড, ডেটাবেস ট্রানজেকশন, SaveChanges ইত্যাদির আগে বা পরে কাস্টম লজিক এক্সিকিউট করতে পারেন। ইন্টারসেপ্টরের মাধ্যমে আপনি লগিং, পারফরম্যান্স ট্র্যাকিং, সিকিউরিটি চেক, এবং আরো অনেক ধরনের কার্যকলাপ বাস্তবায়ন করতে পারেন।

EF Core Interceptors কীভাবে কাজ করে

EF Core ইন্টারসেপ্টরগুলি সাধারণত একটি নির্দিষ্ট DbContext এর ওপর কাজ করে। আপনি DbContext বা DbCommand এর ইন্টারসেপ্টর তৈরি করতে পারেন, যা আপনার প্রয়োজনে কাস্টমাইজড হতে পারে।

Interceptor ব্যবহার করার উপায়

EF Core তে ইন্টারসেপ্টর যুক্ত করার জন্য আপনাকে IDbCommandInterceptor, IChangeTrackerInterceptor, অথবা ISaveChangesInterceptor ইন্টারফেসগুলির মধ্যে যেকোনো একটিতে ইমপ্লিমেন্টেশন করতে হবে।

উদাহরণস্বরূপ, একটি সিম্পল SaveChangesInterceptor তৈরি করা যেটি SaveChanges() মেথডে হস্তক্ষেপ করবে এবং তখন কিছু লগ বা কাস্টম লজিক কার্যকর হবে:

public class MySaveChangesInterceptor : ISaveChangesInterceptor
{
    public int SavedChanges(SaveChangesContext saveChangesContext)
    {
        // Custom logic before save
        Console.WriteLine("Saving changes...");
        return 0; // Return the result of the save operation
    }

    public void SaveChangesFailed(SaveChangesFailedContext saveChangesFailedContext)
    {
        // Handle failure
        Console.WriteLine("Failed to save changes.");
    }

    // Optionally, implement other methods for detecting change events
}

এরপর, ইন্টারসেপ্টরটি DbContext এ রেজিস্টার করতে হবে:

public class MyDbContext : DbContext
{
    private readonly MySaveChangesInterceptor _saveChangesInterceptor;

    public MyDbContext(DbContextOptions<MyDbContext> options, MySaveChangesInterceptor saveChangesInterceptor) 
        : base(options)
    {
        _saveChangesInterceptor = saveChangesInterceptor;
    }

    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        optionsBuilder.AddInterceptors(_saveChangesInterceptor);
    }
}

এখন, যখন SaveChanges() মেথডটি কল হবে, তখন আপনার কাস্টম ইন্টারসেপ্টর সক্রিয় হয়ে যাবে এবং সেটি ডেটা সেভ করার আগে বা পরে কার্যকর হবে।


Logging Techniques in EF Core

Logging হল একটি গুরুত্বপূর্ণ টেকনিক যা অ্যাপ্লিকেশনের কার্যকলাপ, ডেটাবেস কুয়েরি, পারফরম্যান্স, এবং ত্রুটি ট্র্যাক করতে ব্যবহৃত হয়। EF Core-এ লোগিং খুবই গুরুত্বপূর্ণ, কারণ এটি ডেটাবেস কুয়েরি, ট্রানজেকশন, এবং অন্যান্য অপারেশনের ডিবাগিং এবং পারফরম্যান্স টিউনিংয়ে সাহায্য করে। EF Core এর লগিং সিস্টেম মূলত Microsoft.Extensions.Logging লাইব্রেরির মাধ্যমে কাজ করে।

EF Core-এ Logging সক্ষম করা

EF Core এর লোগিং সিস্টেম কনফিগার করতে আপনাকে ILogger ইন্টারফেস ব্যবহার করতে হবে, যা সাধারণত ILoggerFactory এর মাধ্যমে কনফিগার করা হয়।

public class MyDbContext : DbContext
{
    private readonly ILoggerFactory _loggerFactory;

    public MyDbContext(DbContextOptions<MyDbContext> options, ILoggerFactory loggerFactory)
        : base(options)
    {
        _loggerFactory = loggerFactory;
    }

    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        // Enabling logging
        optionsBuilder.UseLoggerFactory(_loggerFactory);
        optionsBuilder.EnableSensitiveDataLogging(); // Enables logging of sensitive data, like SQL queries
    }
}

এখানে:

  • UseLoggerFactory ব্যবহার করে আপনি EF Core-এ লগিং সক্রিয় করেন।
  • EnableSensitiveDataLogging অপশনটি ব্যবহার করলে লগে স্নিগ্ধ ডেটা যেমন SQL কুয়েরি সহ বিস্তারিত লগ পাওয়া যায়।

SQL Query Logging

EF Core-এর লগিং সিস্টেমটি SQL কুয়েরি লগ করতে সক্ষম। আপনি লগিং সক্রিয় করার পর, EF Core আপনার কুয়েরি ও অন্যান্য কার্যকলাপ কনসোল বা ফাইল আউটপুটে রেকর্ড করবে। এটি ডিবাগিং এবং পারফরম্যান্স অপটিমাইজেশন এর জন্য খুবই কার্যকর।

var optionsBuilder = new DbContextOptionsBuilder<MyDbContext>();
optionsBuilder.UseSqlServer("YourConnectionString")
              .EnableSensitiveDataLogging()
              .UseLoggerFactory(LoggerFactory.Create(builder => builder.AddConsole()));

using (var context = new MyDbContext(optionsBuilder.Options))
{
    var customers = context.Customers.Where(c => c.City == "New York").ToList();
}

এটি SQL কুয়েরি আউটপুট কনসোলে লগ করবে, যা আপনাকে কুয়েরি এবং তার এক্সিকিউশন টাইম বিশ্লেষণ করতে সাহায্য করবে।


Advanced Logging Techniques

Log Filter Configuration

আপনি চাইলে শুধু নির্দিষ্ট টাইপের লগগুলোই রেকর্ড করতে পারেন, যেমন কেবল Warning, Error, বা Information লগ। এটি আপনাকে অ্যাপ্লিকেশনটি অপটিমাইজ করতে এবং খুব বেশি লগ ডেটা না জমাতে সহায়তা করবে।

public static ILoggerFactory CreateLoggerFactory()
{
    return LoggerFactory.Create(builder =>
    {
        builder
            .AddFilter("Microsoft.EntityFrameworkCore.Database.Command", LogLevel.Information)
            .AddConsole();
    });
}

File-based Logging

লগগুলোকে ফাইলে রেকর্ড করতে File Logger ব্যবহার করা যেতে পারে। আপনি Serilog, NLog, বা Log4Net এর মতো জনপ্রিয় ফাইল লগিং লাইব্রেরি ব্যবহার করতে পারেন EF Core লগিংয়ের জন্য।


Conclusion

EF Core Interceptors এবং Logging Techniques আপনাকে ডেটাবেসের কার্যকলাপের উপর পূর্ণ নিয়ন্ত্রণ এবং পর্যবেক্ষণ প্রদান করে। এগুলির মাধ্যমে আপনি transaction tracking, performance monitoring, এবং error handling আরও দক্ষভাবে পরিচালনা করতে পারবেন। লগিং এবং ইন্টারসেপ্টর ব্যবহারের মাধ্যমে অ্যাপ্লিকেশনটির কার্যকারিতা ও নিরাপত্তা নিশ্চিত করা সম্ভব, এবং প্রয়োজনে ডিবাগিংয়ের সময় ভুলগুলো দ্রুত চিহ্নিত করা যায়।

common.content_added_by
টপ রেটেড অ্যাপ

স্যাট অ্যাকাডেমী অ্যাপ

আমাদের অল-ইন-ওয়ান মোবাইল অ্যাপের মাধ্যমে সীমাহীন শেখার সুযোগ উপভোগ করুন।

ভিডিও
লাইভ ক্লাস
এক্সাম
ডাউনলোড করুন
Promotion